// 定义校验规则提供给vee-validate组件使用
import { userCheckAccount } from '../../../api/user';
export default {
  // 校验account
  account(value: string) {
    // value是将来使用该规则的表单元素的值
    // 1. 必填
    // 2. 6-20个字符，需要以字母开头
    // 如何反馈校验成功还是失败，返回true才是成功，其他情况失败，返回失败原因。
    if (!value) return '请输入用户名';
    if (!/^[a-zA-Z]\w{5,19}$/.test(value)) return '字母开头且6-20个字符';
    return true;
  },
  password(value: string) {
    if (!value) return '请输入密码';
    if (!/^\w{6,24}$/.test(value)) return '密码是6-24个字符';
    return true;
  },
  mobile(value: string) {
    if (!value) return '请输入手机号';
    if (!/^1[3-9]\d{9}$/.test(value)) return '手机号格式错误';
    return true;
  },
  code(value: string) {
    if (!value) return '请输入验证码';
    if (!/^\d{6}$/.test(value)) return '验证码是6个数字';
    return true;
  },
  isAgree(value: boolean) {
    if (!value) return '请勾选同意用户协议';
    return true;
  },
  async accountApi(value: string) {
    if (!value) return '请输入用户名';
    if (!/^[a-zA-Z]\w{5,19}$/.test(value)) return '字母开头且6-20个字符';
    // 服务端校验
    const {
      data: { result }
    } = await userCheckAccount(value);
    if (result.valid) return '用户名已存在';
    return true;
  },
  rePassword(value: string, { form }: any) {
    if (!value) return '请输入密码';
    if (!/^\w{6,24}$/.test(value)) return '密码是6-24个字符';
    // 校验密码是否一致  form表单数据对象
    if (value !== form.password) return '两次输入的密码不一致';
    return true;
  }
};
